USE [Bases2]
GO
/****** Object:  StoredProcedure [dbo].[ConsultarSaldo]    Script Date: 12/01/2011 13:45:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ConsultarSaldo]
    @id_cuenta int
AS 
BEGIN
	SET NOCOUNT ON
	BEGIN TRANSACTION
	
	DECLARE @contador int;
	SET @contador=0	;
	
	SELECT @contador=COUNT(1)
	FROM CUENTA
	WHERE id_cuenta=@id_cuenta;
	
	IF @contador<=0
	BEGIN
		SELECT '-1','El numero de cuenta que ingreso no existe.';				
	END
	ELSE
	BEGIN
		SELECT @contador=COUNT(1)
		FROM BANCO
		INNER JOIN CUENTA ON BANCO.id_banco= CUENTA.id_banco 
		INNER JOIN TIPO_CUENTA ON CUENTA.id_tipo_cuenta=TIPO_CUENTA.id_tipo_cuenta
		INNER JOIN CLIENTE_CUENTA ON CLIENTE_CUENTA.id_cuenta=CUENTA.id_cuenta
		INNER JOIN CLIENTE ON CLIENTE.id_cliente=CLIENTE_CUENTA.id_cliente
		INNER JOIN TIPO_CLIENTE ON TIPO_CLIENTE.id_tipo_cliente=CLIENTE.id_tipo_cliente
		INNER JOIN ESTADO_CUENTA ON ESTADO_CUENTA.id_cuenta=CUENTA.id_cuenta
		WHERE (ESTADO_CUENTA.id_tipo_estado=0 OR ESTADO_CUENTA.id_tipo_estado=1)
		AND ESTADO_CUENTA.estado=1
		AND CUENTA.id_cuenta=@id_cuenta;
		
		IF @contador>0
		BEGIN
			SELECT '-1','La cuenta que ingreso se encuentra bloqueada o cancelada.';				
		END
		ELSE
		BEGIN
			DECLARE @DepositosCompensados decimal (18,2), @Debitos decimal (18,2), @DespositosNo decimal (18,2), @Diferencia decimal (18,2)
			
			SELECT @DepositosCompensados=SUM(monto)
			FROM DEPOSITO
			INNER JOIN CUENTA ON CUENTA.id_cuenta=DEPOSITO.id_cuenta
			WHERE CUENTA.id_cuenta=@id_cuenta
			AND DEPOSITO.compensado=1						
			
			SELECT @DespositosNo=SUM(monto)
			FROM DEPOSITO
			INNER JOIN CUENTA ON CUENTA.id_cuenta=DEPOSITO.id_cuenta
			WHERE CUENTA.id_cuenta=@id_cuenta
			AND DEPOSITO.compensado=0
			
			SELECT @Debitos=SUM(monto)
			FROM DEBITO
			INNER JOIN CUENTA ON CUENTA.id_cuenta=DEBITO.id_cuenta
			WHERE CUENTA.id_cuenta=@id_cuenta
			
			
			SET @Diferencia= ISNULL(@DepositosCompensados,0)-ISNULL(@Debitos,0)+ISNULL(@DespositosNo,0)

			SELECT 1,TIPO_CUENTA.nombre tipocuenta,CLIENTE.id_cliente,CLIENTE.nombre,ISNULL(CLIENTE.apellido,'') apellido,ISNULL(CLIENTE.cedula,'') cedula,TIPO_CLIENTE.nombre tipocliente,ISNULL(@DespositosNo,0) SinCompensacion,@Diferencia Saldo
			FROM CUENTA
			INNER JOIN CLIENTE_CUENTA ON CLIENTE_CUENTA.id_cuenta=CUENTA.id_cuenta
			INNER JOIN CLIENTE ON CLIENTE.id_cliente=CLIENTE_CUENTA.id_cliente
			INNER JOIN TIPO_CUENTA ON TIPO_CUENTA.id_tipo_cuenta=CUENTA.id_tipo_cuenta
			INNER JOIN TIPO_CLIENTE ON TIPO_CLIENTE.id_tipo_cliente=CLIENTE.id_tipo_cliente
			WHERE CUENTA.id_cuenta=@id_cuenta												
		END
	END	
	
	COMMIT
	SET NOCOUNT OFF
END
